//
//  MCCardFileWriter.h
//  ApexIOTCardSDK
//
//  Created by 黄亮东 on 16/5/10.
//  Copyright © 2016年 珠海艾派克科技股份有限公司. All rights reserved.
//
/**
 * 这是一个可以向某个卡片写入本地文件数据的对象代表。
 *
 *
 * @since 1.0
 * @version 1.0
 * @author ys
 *
 */
#import <Foundation/Foundation.h>
#import "MCCardWriteEvent.h"
#import "MCCard.h"
@protocol MCCardFileWriteDelegate<NSObject>
/**
 * 表示设备已经准备好（含初始化），可以或准备开始写入数据。
 *
 * @param event
 */
- (void)onCardWriteDidStarted:(MCCardWriteEvent *)event;
/**
 * 设备在写的过程中，根据本方法，基于数据单位来通知写卡的进度。
 *
 * @param event
 */
- (void)onCardWriteProgress:(MCCardWriteEvent *)event;
/**
 * 写任务完成。
 *
 * @param event
 */
- (void)onCardWriteDidFinished:(MCCardWriteEvent *)event;

@end

@interface MCCardFileWriter : NSObject

@property (nonatomic, weak) id<MCCardFileWriteDelegate>delegate;

/**
 *  把需要写入卡里面的文件清单打包成一个映像文件，写入进度为该映像文件的进度。
 *
 *  打包准备写入卡里面的文件清单，底层将会计算文件在卡中的文件分配，计算文件大小是否超过卡片容量等；并且会按照存储格式来进行打包。
 *
 *  暂时不支持删除文件，后续版本会支持。
 *
 *  @param card 需要打包的卡片实体类，里面包含了必要的卡片信息及文件数据
 *
 *  @return 如果文件太长超过卡的存储大小，将会返回NO
 */
- (BOOL)pack:(MCCard *)card;

/**
 *  将打包好的数据写入卡片，会触发MCCardFileWriteDelegate中的代理方法
 *
 *  底层不支持多个文件分开写入，只能调用一次该方法，然后只要卡片全部数据写完，底层则应该自动将该卡片解锁。
 */
- (void)write;

/**
 *  释放相关的系统资源
 */
- (void)close;

/**
 *  检查当前写卡管理是否已经被关闭
 */
@property (nonatomic, assign) BOOL isClose;

@end
